package br.com.puertorico.common.utils;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.text.Normalizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CommonUtils {
	public static boolean isEmpty(Object obj) {
		return (obj == null || obj.toString().isEmpty());
	}

	public static String findPatternInString(String str, String pattern) {
		Pattern patter = Pattern.compile(pattern);
		Matcher matcher = patter.matcher(str);
		if (matcher.find()) {
			String key = str.substring(matcher.start(), matcher.end());
			return key;
		}
		return null;
	}

	public static String getNomeArquivo(String nome) {
		int index = nome.lastIndexOf("\\");
		if (index != -1) {
			nome = nome.substring(index, nome.length());
		} else {
			index = nome.lastIndexOf("/");
			if (index != -1) {
				nome = nome.substring(index, nome.length());
			}
		}
		return nome;
	}

	public static String concatenaStrings(String... args) {
		StringBuilder newString = new StringBuilder();
		boolean empty = true;
		for (String str : args) {
			newString.append(str);
			empty = false;
		}
		return (empty) ? null : newString.toString();
	}

	public static String normalizaNomeArquivo(String nome) {
		// pega apenas o nome apos os / ou \
		nome = getNomeArquivo(nome);
		// remove os ascentos
		nome = Normalizer.normalize(nome, Normalizer.Form.NFD);
		// troca multiplos espacos por apenas 1 _
		nome = nome.replaceAll("\\s{1,}", "_");
		// deixa somente o que for digito, letra, ., _, -
		return nome.replaceAll("[^\\d|^\\w|^\\.|^_|^\\-]", "");
	}

	public static String normalizaString(String str) {
		str = Normalizer.normalize(str, Normalizer.Form.NFD);
		str = str.replaceAll("[^\\p{ASCII}]", "");
		return str;
	}

	public static String isoToUtf8(byte[] input) {
		if (input == null) {
			return null;
		}
		Charset utf8charset = Charset.forName("UTF-8");
		Charset iso88591charset = Charset.forName("ISO-8859-1");
		ByteBuffer inputBuffer = ByteBuffer.wrap(input);
		// decode ISO-8559-1
		CharBuffer data = iso88591charset.decode(inputBuffer);
		// encode UTF-8
		java.nio.ByteBuffer outputBuffer = utf8charset.encode(data);
		try {
			String nome = new String(outputBuffer.array(), "UTF-8").trim();
			return nome;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}
